package visiopuce.ui.view;

import java.util.List;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.wb.swt.SWTResourceManager;

import visiopuce.ApplicationContexte;
import visiopuce.objets.Analyse;
import visiopuce.objets.Utilisateur;
import visiopuce.service.AnalyseServiceImpl;
import visiopuce.ui.QuelTravailDialog;
import visiopuce.ui.listener.DoubleCliqueListeTravailListener;
import visiopuce.ui.providers.ListeTravailTableLabelProvider;

public class ListeTravailView extends ViewPart {

	public static final String ID = "visiopuce.listeTravailView";
	private TableViewer tableViewer;
	private Label nombreResultat;
	private Label titres;
	private Composite c;
	private List<Analyse> analyses;
	private String travail = "";
	private String analyse = "";

	public ListeTravailView() {
		QuelTravailDialog dialog = new QuelTravailDialog(Display.getCurrent().getActiveShell());
		if (dialog.open() == IDialogConstants.OK_ID) {
			travail = dialog.getTravail();
			analyse = dialog.getAnalyse();
		}
	}

	@Override
	public void createPartControl(Composite parent) {
		if (!analyse.isEmpty() && !travail.isEmpty())
			analyses = AnalyseServiceImpl.getInstance().getListeTravail(travail, analyse);

		final ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);

		c = new Composite(sc, SWT.NONE);
		c.setLayout(new GridLayout(1, true));
		c.setSize(400, 400);
		sc.setContent(c);
		sc.setExpandHorizontal(true);
		sc.setExpandVertical(true);
		sc.getVerticalBar().setIncrement(10);
		sc.getHorizontalBar().setIncrement(10);
		sc.setMinSize(c.computeSize(1000, 1000));

		// sc1.setLayoutData(new GridData());
		// sc1.setExpandVertical(true);
		//
		// c = new Composite(sc1, SWT.NONE);
		// sc1.setContent(c);
		// sc1.getVerticalBar().setIncrement(10);
		// sc1.getHorizontalBar().setIncrement(10);
		// sc1.setExpandHorizontal(true);

		// sc1.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
		// this.setControl(sc1);

		c.setLayout(new GridLayout(1, true));

		titres = new Label(c, SWT.BORDER);
		titres.setFont(SWTResourceManager.getFont("Segoe UI", 15, SWT.BOLD | SWT.UNDERLINE_SQUIGGLE));

		Utilisateur u = ApplicationContexte.getInstance().getUtilisateur();

		titres.setText(analyse + " " + travail);
		titres.pack();

		nombreResultat = new Label(c, SWT.BORDER);
		nombreResultat.setText("Nombre de dossiers trouvés : " + analyses.size());
		nombreResultat.pack();

		tableViewer = new TableViewer(c, SWT.FULL_SELECTION);
		createColumns(tableViewer);
		Table table = tableViewer.getTable();
		GridData gd = new GridData(SWT.LEFT, SWT.FILL, false, true);
		if (analyses.size() > 0) {
			gd.minimumHeight = 150;// Math.min(150, analyses.size() + 1
									// * 10);
		}

		table.setLayoutData(gd);
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
		tableViewer.setContentProvider(ArrayContentProvider.getInstance());
		tableViewer.addDoubleClickListener(new DoubleCliqueListeTravailListener());
		tableViewer.setInput(analyses);
		tableViewer.getTable().pack();

	}

	@Override
	public void setFocus() {
		// TODO Auto-generated method stub

	}

	private void createColumns(TableViewer table) {
		String[] titles = null;
		if (!analyse.contains("uce")) {
			titles = new String[] { "Identité", "Prélèvement", "Date de réception", "Urgent" };
			TableViewerColumn column1 = createTableViewerColumn(titles[0], 300, 0, table);
			TableViewerColumn column2 = createTableViewerColumn(titles[1], 100, 1, table);
			TableViewerColumn column3 = createTableViewerColumn(titles[2], 40, 2, table);
			TableViewerColumn column4 = createTableViewerColumn(titles[3], 300, 3, table);
		} else {
			titles = new String[] { "Identité", "Prélèvement", "Date de réception", "Urgent", "Pré-analyse", "Biologiste" };
			TableViewerColumn column1 = createTableViewerColumn(titles[0], 300, 0, table);
			TableViewerColumn column2 = createTableViewerColumn(titles[1], 100, 1, table);
			TableViewerColumn column3 = createTableViewerColumn(titles[2], 40, 2, table);
			TableViewerColumn column4 = createTableViewerColumn(titles[3], 300, 3, table);
			TableViewerColumn column5 = createTableViewerColumn(titles[4], 100,4, table);
			TableViewerColumn column6 = createTableViewerColumn(titles[5], 100, 5, table);
		}

	}

	private TableViewerColumn createTableViewerColumn(String header, int width, int idx, TableViewer table) {
		TableViewerColumn column = new TableViewerColumn(table, SWT.LEFT, idx);
		column.getColumn().setText(header);
		column.getColumn().setWidth(width);
		column.getColumn().setResizable(true);
		column.getColumn().setMoveable(true);
		column.setLabelProvider(new ListeTravailTableLabelProvider(idx));
		return column;
	}

}
